package algo.utilitaire;

import algo.graphe.Noeud;
import java.util.LinkedList;
import java.util.NoSuchElementException;

/**
 *
 * @author <a href="mailto:christian.dramsy@gmail.com">DRAMSY Christian </a>
 */
public class UtilitaireAffichage {

    /**
     * Affiche l'idice des valeur true dans un tableau
     */
    public static void afficheIndiceTrue(boolean[] tab) {
        for (int i = 0; i < tab.length; i++) {
            if (tab[i] == true) {
                System.out.print(i + " ");
            }
        }
        System.out.println();
    }

    public static void afficherTableau(int[] T) {
        for (int i = 0; i < T.length; i++) {
            System.out.print(T[i] + " | ");
        }
        System.out.println();
    }

    public static void afficherTableau(boolean[] T) {
        for (int i = 0; i < T.length; i++) {
            System.out.print(T[i] + " | ");
        }
        System.out.println();
    }

    public static void afficherTableauNoeud(Noeud[] T) {
        for (int i = 0; i < T.length; i++) {
            System.out.print("[" + T[i].getNum() + ":" + T[i].getValeur() + "] ");
        }
        System.out.println();
    }

    public static void afficherMatriceNoeud(Noeud[][] noeuds, int ordre) {
        for (int i = 0; i < ordre; i++) {
            System.out.print((i + ":"));
            for (int j = 0; j < ordre - 1; j++) {
                System.out.print("[" + noeuds[i][j].getNum() + ":" + noeuds[i][j].getValeur() + "] ");
            }
            System.out.println();
        }
    }

    /**
     * Affiche le résultat de l'algorithme de Dijkstra
     * @param distance
     * @param antecedant
     * @param beginNode 
     */
    public static void afficherResultatDijkstra(int[] distance, int[] antecedant, int beginNode) {
        int pred = -1;
        System.out.println("========================================================================");
        System.out.println("Le sommet de depart est : " + beginNode);
        System.out.println("========================================================================");
        for (int i = 0; i < distance.length; i++) {
            if (i != beginNode) {
                pred = antecedant[i];
                if (pred >= 0) {

                    System.out.println("------------------------------------------------------------------------");
                    System.out.print("De " + beginNode + " à " + i + " : ");
                }

                String parcours = beginNode + " - " + pred + " - " + i;
                LinkedList<Integer> list = new LinkedList<Integer>();
                while (pred != beginNode && pred >= 0) {
                    pred = antecedant[pred];
                    if (pred != beginNode) {
                        list.addFirst(pred);
                    }
                }

                while (true) {
                    try {
                        parcours += " - " + list.removeFirst().toString();
                    } catch (NoSuchElementException e) {
                        break;
                    }
                }

                if (pred >= 0) {
                    System.out.println("[ " + parcours + " ]");
                    System.out.println(" Le cout de ce chemin est  " + distance[i]);
                }
            }
        }
    }
}